import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "demo2.settings")
import django
django.setup()

from usersapp.models import BookInfo, HeroInfo
from django.db.models import F, Q, Sum, Max
import datetime

# 创建名为西游记的图书，添加到数据库中
# book = BookInfo.objects.create(btitle='西游记', bpub_date=datetime.date(1999, 1, 1))

# 创建孙悟空的英雄，关联西游记，添加到书库中
# HeroInfo.objects.create(hname='孙悟空', hbook=book)

# - 1.查询编号为1的图书【两种方式】
# book = BookInfo.objects.get(id=1)
# book = BookInfo.objects.get(id__exact=1)
# print(book)

# - 2.查询所有图书的数量
# print(BookInfo.objects.count())

# - 3.查询书名包含雪山的图书【开头，结尾】
# print(BookInfo.objects.filter(btitle__contains='雪山'))
# print(BookInfo.objects.filter(btitle__startswith='雪山'))
# print(BookInfo.objects.filter(btitle__endswith='雪山'))

# - 4.查询书籍名不为空的书籍
# print(BookInfo.objects.filter(btitle__isnull=False))

# - 5.查询书籍编号为1，3，5的图书
# print(BookInfo.objects.filter(id__in=[1, 3, 5]))

# - 6.查询编号大于3的图书
# print(BookInfo.objects.filter(id__gt=3))

# - 7.查询编号大于等于3的图书
# print(BookInfo.objects.filter(id__gte=3))

# - 8.查询编号不等于3的图书
# print(BookInfo.objects.exclude(id=3))

# - 9.查询1980年发表的图书
# print(BookInfo.objects.filter(bpub_date__year=1980))

# - 10.查询1980年1月1号之后发表的图书
# print(BookInfo.objects.filter(bpub_date__gt=datetime.date(1980, 1, 1)))
#
# - ===二、FQ查询===
# - 11.查询阅读量大于等于评论量的图书
# print(BookInfo.objects.filter(bread__gt=F('bcomment')))

# - 12.查询阅读量大于等于2倍评论量的图书
# print(BookInfo.objects.filter(bread__gt=F('bcomment') * 2))

# - 13.查询阅读量大于20，并且编号小于3的图书
# print(BookInfo.objects.filter(bread__gte=20, id__lt=3))

# - 14.查询阅读量大于20，或编号小于3的图书，只能使用Q对象实现
# print(BookInfo.objects.filter(Q(bread__gte=20) | Q(id__lt=3)))

# - 15.查询编号不等于3的图书，使用Q对象实现
# print(BookInfo.objects.filter(~Q(id=3)))

# - 16.查询所有阅读量的总和
# print(BookInfo.objects.aggregate(Sum('bread')))

# - 17.查询最大的评论量
# print(BookInfo.objects.aggregate(Max('bcomment')))

# - 18.查询所有图书，按照阅读量排序，升序【降序】
# print(BookInfo.objects.order_by('bread'))
# print(BookInfo.objects.order_by('-bread'))


# - ===三、关联过滤查询===
# - 19.查询书籍编号为1，中的所有英雄
# print(HeroInfo.objects.filter(hbook__id=1))

# - 20.查询书籍名称为雪山飞狐的，所有的英雄
# print(HeroInfo.objects.filter(hbook__btitle='雪山飞狐'))

# - 21.查询英雄编号为1，所属的图书
# print(BookInfo.objects.get(heroinfo__id=1))

# - 22.查询英雄中有乔峰的书籍
# print(BookInfo.objects.filter(heroinfo__hname='乔峰'))

# - 23.查询英雄名字中包含‘郭’的书籍
# print(BookInfo.objects.filter(heroinfo__hname__contains='郭'))

# - 24.查询书籍阅读量大于30的书籍中的所有英雄
# print(HeroInfo.objects.filter(hbook__bread__gt=30))

#
# 三，修改数据
# - 1.修改书籍名为雪山飞狐的书籍，改为雪山飞猫
# BookInfo.objects.filter(btitle='雪山飞狐').update(btitle='雪山飞猫')

# - 2.修改英雄名为孙悟空的任务，改名为孙大圣
# HeroInfo.objects.filter(hname='孙悟空').update(hcomment='孙大圣')

#
# 四，删除数据
# - 1.删除编号为 10 的英雄
# HeroInfo.objects.filter(id=10).delete()

# - 2.删除英雄名为 郭靖 的英雄
# HeroInfo.objects.filter(hname='郭靖').delete()


